首页 > 其他分享 >指针数组,数组指针,函数

指针数组,数组指针,函数

时间:2023-07-14 21:45:00浏览次数:47  
标签:函数 int 数组 printf main 指针

指针数组

指针数组,首先它是一个数组,数组里面的存储的是一个个指针,例如int* p[5];,指针数组里面的元素大小都是一样的,都是一个指针的大小,也就是8个字节(64位机器),sizeof(p);就为40个字节。下标的本质:下标的本质就是偏移量,[]的含义是解引用

#include <stdio.h>

int main(void)
{
	int* p[5];
	printf("数组p的大小:%zd\n", sizeof(p));

	return 0;
}

image
当我们把p+1后,它与p之间就差了一个指针大小也就是8个字节。

#include <stdio.h>

int main(void)
{
	int* p[5];
	printf("p=%p\n", p);
	printf("p+1=%p\n", p+1);

	return 0;
}

image

数组指针

数组指针,首先它是一个指针,这个指针的类型是一个有长度的数组,如果我们把p+1后,它与p之间就会差数组元素个数的大小,例如int(*p)[3];

#include <stdio.h>

int main(void)
{
	int(*p)[3];
	printf("p=%p\n", p);
	printf("p+1=%p\n", p+1);

	return 0;
}

image
因为int(*p)[3];里面有三个int大小也就是12个字节,所以p+1就多了12个字节。

函数

函数是C语言的基本组成单位,首先是函数的定义,函数里面封装的都是一段逻辑代码,用来处理事务的,定义好后,就直接在main函数中调用即可,大大增强了代码的复用。定义格式:

函数返回值类型 函数名(参数类型 参数名){

}

函数名可采用驼峰命名法和匈牙利命名法。例如我们定义一个计算两个数相加的函数

#include <stdio.h>

int addNum(int a, int b)
{
	return a + b;
}


int main(void)
{
	printf("%d\n", addNum(2,3));
	
	return 0;
}

image

形参和实参

形参只是一个个变量,而实参都是一个个实际的值。我们在main函数中创建并初始化一个变量。我们在函数中的任何运算都不会影响它本身的值,因为我们的作用域不同。

#include <stdio.h>

void addNum(int a)
{
	a = 20;
}


int main(void)
{
	int a = 10;
	printf("修改前a的值:%d\n", a);
	addNum(a);
	printf("修改后a的值:%d\n", a);
	
	return 0;
}

image
显而易见,a的值并未修改,因为main函数里的a和addNum里的a不是同一个a。如果要想修改它,那么我们可以把a的地址当做参数传给函数,这样我们就能在函数内成功修改a的值。

#include <stdio.h>

void modify(int* p)
{
	*p = 20;
}
int main(void)
{
	int a = 10;
	printf("修改前a的值:%d\n", a);
	modify(&a);
	printf("修改后a的值:%d\n", a);
	
	return 0;
}

image
成功修改a的值。传递地址能打破作用域的限制

标签:函数,int,数组,printf,main,指针
From: https://www.cnblogs.com/bcc0729/p/17554958.html

相关文章

  • SQL注入问题、视图、触发器、事务、存储过程、函数、流程控制、索引、测试索引
    SQL注入问题连接MySQL服务器conn=pymysql.connect(host=‘127.0.0.1’port=3306user=‘root’password='1234'......
  • 【ChernoC++笔记】智能指针
    【44】【ChernoC++】【中字】C++的智能指针智能指针(Smartpointers)是C++中的一种特殊类型,用于管理动态分配的内存资源。智能指针通过封装指针,并在适当的时机自动释放内存,从而避免内存泄漏和悬空指针等常见问题。unique_ptr❓为什么叫做uniqueptr?unique_ptr不能复制:如果复......
  • 聚合函数
    Oracle支持许多内建的聚合函数,可以对数据进行统计汇总。常用的聚合函数如下:COUNT:统计行数SUM:求和AVG:平均值MAX:最大值MIN:最小值STDDEV:标准差VARIANCE:方差例如:--统计employees表的行数SELECTCOUNT(*)FROMemployees;--求employees表的工资总和SELECT......
  • Qt信号槽信号函数重载问题 error: C2664: “QMetaObject::Connection const”
    //connect(spinFontSize,&QSpinBox::valueChanged,this,&MainWindow::spinFontSize_valueChanged);//由于信号函数存在重载,发送者找不到正确信号函数。//改用A.Qt4带形参方式//connect(spinFontSize,SIGNAL(valueChanged(int)),this,SLOT(spinFontSize_valueChang......
  • 【JavaScript】js 处理复制函数实现
    exportconstcopyText=(text:string)=>{constinput=document.createElement('input');input.setAttribute('readonly','readonly');input.setAttribute('value',text);document.body.appendChild(input);......
  • Math函数之Random随机数、Date日期
    publicstaticvoidmain(String[]args)throwsParseException{Datedate1=newDate();//nowDatedate2=newDate(0);//计算机元年Datedate3=newDate(Long.MAX_VALUE);//毫秒数Datedate4=newDate(Long.MIN_VALUE);......
  • Cygwin、Linux Bash计算某个时刻偏移一定时间长度后的时间通用函数:datetimecount
    datetimecount函数代码datetimecount(){ #计算某个日期时间偏移一定时间长度后的时刻(目前主要供录制IPTV直播源时计算视频时长使用) #$1-->偏移量:符合date命令的描述参数即可,也支持传递标准时间格式:eg:+01:23:35(标记符号(加减号)可省略,小时字段可省略) #$2-->要计算偏移......
  • 你需要知道关于C语言指针的一切
    EverythingyouneedtoknowaboutpointersinC你需要知道关于C语言指针的一切指针的定义指针是内存地址。(嗯,简短的段落。)开始假设你声明一个名为foo的变量。foo;这个变量占用一些内存。在当前主流的Intel处理器上,它占用四个字节的内存(因为int是四个字节宽)。现在......
  • python之数据库:SQL注入问题,视图,触发器,事务,存储过程,函数,流程控制,索引,慢查询
    SQL注入问题(了解现象)importpymysql#连接MySQL服务端conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123',database='db8_3',charset='utf8',autocommit=True#......
  • 【Matlab函数】提取inp文件中的节点、单元数据并保留集合信息
    功能提取hypermesh2020(其他版本也可以)中的节点、单元信息,并保留elemset信息。返回的是一个结构体输入输出参数输入:inp文件路径,如:'example.inp'、"inp\ex.inp"输出:一个结构体,包含节点信息、单元信息、单元集合信息、部件名字。Struct--Name--Nodes--Ele......