<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-2%3Asrag014</id>
	<title>SE250:lab-2:srag014 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-2%3Asrag014"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-2:srag014&amp;action=history"/>
	<updated>2026-04-29T02:04:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.kram.nz/index.php?title=SE250:lab-2:srag014&amp;diff=5266&amp;oldid=prev</id>
		<title>Mark: 37 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-2:srag014&amp;diff=5266&amp;oldid=prev"/>
		<updated>2008-11-03T05:19:11Z</updated>

		<summary type="html">&lt;p&gt;37 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This second lab is primarily based on pointers.&lt;br /&gt;
&lt;br /&gt;
===Task 1===&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int main(){&lt;br /&gt;
       int *ip;&lt;br /&gt;
       printf(&amp;quot;%d\n&amp;quot;, sizeof(ip));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Size of all pointers no matter the data type or OS, they all had the same value of 4.&lt;br /&gt;
I thought the value will vary in Linux but guess it doesnt.&lt;br /&gt;
&lt;br /&gt;
===Task 2===&lt;br /&gt;
In task 2 we had to declare two variables x and y and print out their addresses and also the difference between these addresses &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int main(void){&lt;br /&gt;
         int x;&lt;br /&gt;
         int y;&lt;br /&gt;
         printf(&amp;quot;&amp;amp;x=%p,&amp;amp;y=%p,diff=%ld\n&amp;quot;,&amp;amp;x,&amp;amp;y,(long)(&amp;amp;x-&amp;amp;y));&lt;br /&gt;
         printf(&amp;quot;&amp;amp;x=%p,&amp;amp;y=%p,diff=%ld\n&amp;quot;,&amp;amp;x,&amp;amp;y,((long)&amp;amp;x-(long)&amp;amp;y));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
For Windows:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;x=0023FDB0        &amp;amp;y=0023FDA4        diff=3  &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;x=0023FDB0        &amp;amp;y=0023FDA4        diff=12 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Linux:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;x = 0xffa75710 &amp;amp;y = 0xffa7570c, difference = 1 &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;x = 0xffa75710 &amp;amp;y = 0xffa7570c, difference = 4 &amp;lt;br&amp;gt;&lt;br /&gt;
Note: Had some problems getting into linux as my pc didnt bring up my home drive so had to look at neighbours comp.&lt;br /&gt;
&lt;br /&gt;
===Task 3===&lt;br /&gt;
In task 3 we introduce the statement char arr[4] between the x and y variables.&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int main(void){&lt;br /&gt;
 int x;&lt;br /&gt;
 char arr[4];	&lt;br /&gt;
 int y;&lt;br /&gt;
 printf(&amp;quot;enter needed statement here&amp;quot;,)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Using Windows,we had to find:&lt;br /&gt;
*Sizeof array: 4&lt;br /&gt;
*Address of array: 0012FF54&lt;br /&gt;
*Value of &amp;amp;arr:1245012&lt;br /&gt;
*Value of arr+4:1245016&lt;br /&gt;
*Value of &amp;amp;arr[4]:1245016&lt;br /&gt;
&lt;br /&gt;
Varying the size of the array from 0 to 10, and recording the difference between &amp;amp;x and &amp;amp;y.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int main(){&lt;br /&gt;
 int x;&lt;br /&gt;
 char arr[&amp;quot;enter number here&amp;quot;];&lt;br /&gt;
 int y;&lt;br /&gt;
 printf(&amp;quot;&amp;amp;x=%p,&amp;amp;y=%p,diff=%ld\n&amp;quot;,&amp;amp;x,&amp;amp;y,(long)(&amp;amp;x-&amp;amp;y));&lt;br /&gt;
 printf(&amp;quot;&amp;amp;x=%p,&amp;amp;y=%p,diff=%ld\n&amp;quot;,&amp;amp;x,&amp;amp;y,((long)&amp;amp;x-(long)&amp;amp;y));&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Array sizes and their differences:&amp;lt;br&amp;gt;&lt;br /&gt;
0|Not Applicable&amp;lt;br&amp;gt;&lt;br /&gt;
1|6,24&amp;lt;br&amp;gt;&lt;br /&gt;
2|6,24&amp;lt;br&amp;gt;&lt;br /&gt;
3|6,24&amp;lt;br&amp;gt;&lt;br /&gt;
4|6,24&amp;lt;br&amp;gt;&lt;br /&gt;
5|7,28&amp;lt;br&amp;gt;&lt;br /&gt;
6|7,28&amp;lt;br&amp;gt;&lt;br /&gt;
7|7,28&amp;lt;br&amp;gt;&lt;br /&gt;
8|7,28&amp;lt;br&amp;gt;&lt;br /&gt;
9|8,32&amp;lt;br&amp;gt;&lt;br /&gt;
10|8,32&amp;lt;br&amp;gt;&lt;br /&gt;
Note: No results for linux due to me having technical issues.&lt;br /&gt;
&lt;br /&gt;
Next step is reverting back to array size 4 and setting x and y to 0 and arr[4] to 10 and printing out values &lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int main(){&lt;br /&gt;
 int x=0;&lt;br /&gt;
 char arr[4] = {10};	&lt;br /&gt;
 int y=0;&lt;br /&gt;
 printf(&amp;quot;Value of x=%d\nValue of y=%d\n&amp;quot;, x, y);&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
x=0&amp;lt;br&amp;gt;  &lt;br /&gt;
y=0&amp;lt;br&amp;gt;&lt;br /&gt;
Note: not sure if its correct.&lt;br /&gt;
&lt;br /&gt;
===Task 4===&lt;br /&gt;
Declaring x and y as global variables.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int y;&lt;br /&gt;
 int x;&lt;br /&gt;
 int main(){&lt;br /&gt;
 char arr[&amp;quot;enter number here&amp;quot;];&lt;br /&gt;
 printf(&amp;quot;&amp;amp;x=%p,&amp;amp;y=%p,diff=%ld\n&amp;quot;,&amp;amp;x,&amp;amp;y,(long)(&amp;amp;x-&amp;amp;y));&lt;br /&gt;
 printf(&amp;quot;&amp;amp;x=%p,&amp;amp;y=%p,diff=%ld\n&amp;quot;,&amp;amp;x,&amp;amp;y,((long)&amp;amp;x-(long)&amp;amp;y));&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Array sizes and their differences:&amp;lt;br&amp;gt;&lt;br /&gt;
0|Not Applicable&amp;lt;br&amp;gt;&lt;br /&gt;
1|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
2|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
3|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
4|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
5|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
6|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
7|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
8|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
9|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
10|1,4&amp;lt;br&amp;gt;&lt;br /&gt;
Note:Are the results meant to be the same??Also i get different results on different computers which is expected i suppose.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Task 5===&lt;br /&gt;
 int *p1, *p2;&lt;br /&gt;
 { int q; p1 = &amp;amp;q; }&lt;br /&gt;
 { int r; p2 = &amp;amp;r; }&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I think the values of p1 and p2 will be whatever the address if q and r are since they will be pointing at p and q respectively.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Task 6===&lt;br /&gt;
Program woudnt compile in visual studio.&lt;br /&gt;
&lt;br /&gt;
===Task 7===&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 struct {&lt;br /&gt;
 char my_char;&lt;br /&gt;
 short my_short;&lt;br /&gt;
 int my_int;&lt;br /&gt;
 long my_long;&lt;br /&gt;
 float my_float;&lt;br /&gt;
 double my_double;&lt;br /&gt;
 } my_struct;&lt;br /&gt;
 int main ()&lt;br /&gt;
 {   &lt;br /&gt;
 printf( &amp;quot;&amp;amp;my struct = %p\n&amp;quot;, my_struct );&lt;br /&gt;
 printf( &amp;quot;offsets:\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_char: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_short: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_int: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_long: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_float: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_double: %ld\n&amp;quot;,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_char,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_short,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_int,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_long,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_float,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_double );&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Results:&amp;lt;BR&amp;gt;&lt;br /&gt;
offsets:&amp;lt;BR&amp;gt;&lt;br /&gt;
my_char: 0&amp;lt;BR&amp;gt;&lt;br /&gt;
my_short: -2&amp;lt;BR&amp;gt;&lt;br /&gt;
my_int: -4&amp;lt;BR&amp;gt;&lt;br /&gt;
my_long: -8&amp;lt;BR&amp;gt;&lt;br /&gt;
my_float: -12&amp;lt;BR&amp;gt;&lt;br /&gt;
my_double: -16&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Task 8===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 union {&lt;br /&gt;
 char my_char;&lt;br /&gt;
 short my_short;&lt;br /&gt;
 int my_int;&lt;br /&gt;
 long my_long;&lt;br /&gt;
 float my_float;&lt;br /&gt;
 double my_double;&lt;br /&gt;
 } my_union;&lt;br /&gt;
 int main ()&lt;br /&gt;
 {   &lt;br /&gt;
 printf( &amp;quot;&amp;amp;my struct = %p\n&amp;quot;, my_union );&lt;br /&gt;
 printf( &amp;quot;offsets:\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_char: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_short: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_int: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_long: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_float: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_double: %ld\n&amp;quot;,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_char,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_short,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_int,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_long,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_float,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_double );&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Results from using union:&amp;lt;br&amp;gt;&lt;br /&gt;
offsets:&amp;lt;br&amp;gt;&lt;br /&gt;
my_char: 0&amp;lt;br&amp;gt;&lt;br /&gt;
my_short: 0&amp;lt;br&amp;gt;&lt;br /&gt;
my_int: 0&amp;lt;br&amp;gt;&lt;br /&gt;
my_long: 0&amp;lt;br&amp;gt;&lt;br /&gt;
my_float: 0&amp;lt;br&amp;gt;&lt;br /&gt;
my_double: 0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Task 9===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
 char *sp1, *sp2, *sp3;&lt;br /&gt;
 sp1 = malloc( 10 );&lt;br /&gt;
 printf(&amp;quot;sp1=%p\n&amp;quot;,sp1);	&lt;br /&gt;
 sp2 = malloc( 10 );&lt;br /&gt;
 printf(&amp;quot;sp2=%p\n&amp;quot;,sp2);	&lt;br /&gt;
 free( sp1 );&lt;br /&gt;
 sp3 = malloc( 10 );&lt;br /&gt;
 printf(&amp;quot;sp3=%p\n&amp;quot;,sp3);&lt;br /&gt;
 printf(&amp;quot;sp1=%p\n&amp;quot;,sp1);	&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Results (windows):&amp;lt;br&amp;gt;&lt;br /&gt;
sp1=00924B28&amp;lt;br&amp;gt;&lt;br /&gt;
sp2=00922288&amp;lt;br&amp;gt;&lt;br /&gt;
sp3=009222C0&amp;lt;br&amp;gt;&lt;br /&gt;
sp1=00924B28&amp;lt;br&amp;gt;&lt;br /&gt;
Results(linux):&amp;lt;br&amp;gt;&lt;br /&gt;
sp1= 0xff809728&amp;lt;br&amp;gt;&lt;br /&gt;
sp2= 0xff809724&amp;lt;br&amp;gt;&lt;br /&gt;
sp3= 0xff809720&amp;lt;br&amp;gt;&lt;br /&gt;
sp1= 0xff809728&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>