本文概述
- C
- C ++
- C
- C
- C ++
- C
- C ++
- C
sizeof运算符的行为
C
// 1st program to show that array and pointers are different
#include <
stdio.h>
int main()
{
int arr[] = { 10, 20, 30, 40, 50, 60 };
int * ptr = arr;
// sizof(int) * (number of element in arr[]) is printed
printf ( "Size of arr[] %ld\n" , sizeof (arr));
// sizeof a pointer is printed which is same for all
// type of pointers (char *, void *, etc)
printf ( "Size of ptr %ld" , sizeof (ptr));
return 0;
}
C ++
// 1st program to show that array and pointers are different
#include <
iostream>
using namespace std;
int main()
{
int arr[] = { 10, 20, 30, 40, 50, 60 };
int * ptr = arr;
// sizof(int) * (number of element in arr[]) is printed
cout <
<
"Size of arr[] " <
<
sizeof (arr) <
<
"\n" ;
// sizeof a pointer is printed which is same for all
// type of pointers (char *, void *, etc)
cout <
<
"Size of ptr " <
<
sizeof (ptr);
return 0;
}
输出如下
Size of arr[] 24
Size of ptr 8
不允许将任何地址分配给数组变量。
C
// IInd program to show that array and pointers are different
#include <
stdio.h>
int main()
{
int arr[] = {10, 20}, x = 10;
int *ptr = &
x;
// This is fine
arr = &
x;
// Compiler Error
return 0;
}
输出如下:
Compiler Error: incompatible types when assigning to
type 'int[2]' from type 'int *'
【C语言中的指针和数组之间的区别()】见
以前的帖子
关于此主题的更多差异。
尽管数组和指针是不同的东西, 但是数组的以下属性使它们看起来相似。
- 数组名称给出数组第一个元素的地址。
C
#include <
stdio.h>
int main()
{
int arr[] = { 10, 20, 30, 40, 50, 60 };
// Assigns address of array to ptr
int * ptr = arr;
printf ( "Value of first element is %d" , *ptr);
return 0;
}
C ++
// 1st program to show that array and pointers are different
#include <
iostream>
using namespace std;
int main()
{
int arr[] = { 10, 20, 30, 40, 50, 60 };
// Assigns address of array to ptr
int * ptr = arr;
cout <
<
"Value of first element is " <
<
*ptr;
return 0;
}
输出如下
Value of first element is 10
使用指针算法访问数组成员。
编译器使用指针算法访问数组元素。例如, 像" arr [i]"之类的表达式被编译器视为*(arr + i)。这就是为什么像*(arr + i)这样的表达式可用于数组arr, 而像ptr [i]这样的表达式也可用于指针ptr的原因。
C
#include <
stdio.h>
int main()
{
int arr[] = {10, 20, 30, 40, 50, 60};
int *ptr = arr;
printf ( "arr[2] = %d\n" , arr[2]);
printf ( "*(arr + 2) = %d\n" , *(arr + 2));
printf ( "ptr[2] = %d\n" , ptr[2]);
printf ( "*(ptr + 2) = %d\n" , *(ptr + 2));
return 0;
}
C ++
#include <
iostream>
using namespace std;
int main()
{
int arr[] = { 10, 20, 30, 40, 50, 60 };
int * ptr = arr;
cout <
<
"arr[2] = " <
<
arr[2] <
<
"\n" ;
cout <
<
"*(arr + 2) = " <
<
*(arr + 2) <
<
"\n" ;
cout <
<
"ptr[2] = " <
<
ptr[2] <
<
"\n" ;
cout <
<
"*(ptr + 2) = " <
<
*(ptr + 2) <
<
"\n" ;
return 0;
}
输出如下
arr[2] = 30
*(arr + 2) = 30
ptr[2] = 30
*(ptr + 2) = 30
数组参数始终作为指针传递, 即使我们使用方括号也是如此。
C
#include <
stdio.h>
int fun( int ptr[])
{
int x = 10;
// size of a pointer is printed
printf ( "sizeof(ptr) = %d\n" , ( int ) sizeof (*ptr));
// This allowed because ptr is a pointer, not array
ptr = &
x;
printf ( "*ptr = %d " , *ptr);
return 0;
}
// Driver code
int main()
{
int arr[] = { 10, 20, 30, 40, 50, 60 };
// size of a array is printed
printf ( "sizeof(arr) = %d\n" , ( int ) sizeof (arr));
fun(arr);
return 0;
}
输出如下
sizeof(arr) = 24
sizeof(ptr) = 4
*ptr = 10
请参考
C语言中的指针与数组
更多细节。
本文作者:
阿比·拉西(Abhay Rathi)
。如果发现任何不正确的地方, 或者你想分享有关上述主题的更多信息, 请发表评论
推荐阅读
- 如何在JavaScript中创建链接()
- SCAN(电梯)磁盘调度算法解析和实现
- jQuery的jQuery属性简要介绍
- PHP | SplFixedArray getSize()函数用法介绍
- 如何在href属性内插入JavaScript变量()
- CSS实现分页详细实现代码
- 数字逻辑中的加法器和减法器
- 前端进阶开发实战教程,使用Bootstrap实现博客平台网站响应式布局详解(一)
- Flexbox与Grid布局大比拼,使用哪种布局更好(为什么?)