sizeof,数组,指针

sizeof计算数据类型或变量长度(包括‘\0’),如果计算的变量是一个表达式或函数,只与其最终结果或返回值的类型相关,表达式并不计算,函数也不进行执行。注意计算字符串时计算\0,而strlen不计算\0。

int a[10];

sizeof(a)//计算的就是整个数组的长度,为40; &a,表示取出整个数组的地址,sizeof(&a)=4,sizeof(*&a)=40

其他情况,数组名a均退化为指针。

动态数组的创建和释放
(1)一维数组:
int* arr = new int[n];
delete[] arr;
(2)二维数组:
int** arr = new int*[row];
for (int i = 0; i < row; i++)
{
    arr[i] = new int[col];
}
for (int i = 0; i < row; i++)
{
    delete[] arr[i];
}
delete[] arr;

指针数组:int* arr_ptr[5];  这是一个元素全部是指针的数组

数组指针:int (*arr_ptr)[5]; 这是一个指针,指向了一个数组

以下个人理解,不保证正确:

int arr[5] = { 1,2,3,4,5 };

arr的本质并不是一个地址,而是一个地址加一个大小,表示的是整个数组

输出arr, &arr, &arr[0]的值是相同的,但是arr本质并不是一个地址,而是一个完整的数组,包含arr[0]的地址和数组的大小,当函数调用的时候arr才从数组退化为指针。

而int (*ptr)=&arr;表示ptr指向了数组arr, (*ptr)[i]=arr[i]。ptr+1指向的是arr[4]后面的地址。

 

void类型指针,可以储存任意类型的对象的地址。

指向常量的指针:指针不能改变所指对象的值,但是可以改变所指对象。

const int *p=&a;

指针类型常量:不可改变所指对象

int * const p=&a;

指针型函数,返回值为指针的函数

int* a(){

  return int*;

}

指向函数的指针:

int B(double) { return int; }

int (* A)(double);

A  a;

a=B;

转载于:https://www.cnblogs.com/spock12345/p/11558399.html

数组名和指针sizeof是不同的。根据引用中的解释,数组名和指向该数组指针在地址上是相同的,但是它们的大小不同。数组名的sizeof返回的是整个数组的大小,而指针sizeof返回的是指针类型的大小。所以,sizeof数组名会返回整个数组的大小,而sizeof指针会返回指针类型的大小。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [探讨C++中数组名与指针的用法比较分析](https://download.youkuaiyun.com/download/weixin_38691256/14871672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++/C中 sizeof(指针)和sizeof(数组名)的区别](https://blog.youkuaiyun.com/weixin_38383877/article/details/90922929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [c 语言中的sizeof数组名)和sizeof(指针)](https://blog.youkuaiyun.com/Colorful_lights/article/details/79819682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值